class Lennard
{
  // INSTANZVARIABLEN
  PVector r; // Ortsvektor der Atome
  PVector v; // Geschwindigkeitsvektor der Atome
  PVector a = new PVector(); // Der Beschleunigungsvektor a hat den Startwert (0, 0, 0)
  PVector c; // Farbe (Color) der Atome
  float epsilon = 1; // Tiefe der Potenzialmulde
  float rm; // Abstand zwischenzwei Atomen für F = 0
  float m = 1; // Masse eines Atoms
  float D; // Durchmesser eines Atoms

  // KONSTRUKTOR
  Lennard(PVector rTemp, PVector vTemp, float mTemp, float DTemp, PVector cTemp)
  {
    r = rTemp; 
    v = vTemp;
    m = mTemp;
    D = DTemp;
    c = cTemp;
    rm = 1.5*D;
  }

  // METHODEN
  void move(float t)
  {   
    v.add(PVector.mult(a, t));
    r.add(PVector.mult(v, t));
    a.set(0, 0, 0); // Setzt den Vektor a wieder auf den Wert 0. Sonst würden sich die a-Werte laufend addieren
  }

  void display()
  {
    //  fill(c.x, c.y, c.z);
    // ellipse(r.x, r.y, D, D);
    stroke(c.x, c.y, c.z);
    strokeWeight(D);
    point(r.x, r.y, r.z);
  }

  // Funktion zum Berechnen des Lennard-Jones Potentials
  void force(Lennard WechselwirkungsPartner)
  {
    PVector n = PVector.sub(WechselwirkungsPartner.r, r);
    float d = n.mag();
    n.div(d);
    PVector F = PVector.mult(n, epsilon * (-12*pow(rm, 12)*pow(d, -13) + 12 * pow(rm, 6) * pow(d, -7)));
    a.add(PVector.div(F, m)); // Beschleunigungszuwachs a = F/m
  }
}